//
//  WMELayout.m
//  everyDay_duiTang
//
//  Created by 恩叔 on 16/1/16.
//  Copyright © 2016年 enshu. All rights reserved.
//

#import "WMELayout.h"

@interface WMELayout ()
@property (nonatomic, retain)NSMutableDictionary *columYDic;/**<保存每列的Y值*/
@property (nonatomic, retain)NSMutableArray *attributesArr;/**<布局属性*/
@end

@implementation WMELayout
- (void)dealloc
{
    [super dealloc];
    [_attributesArr release];
    [_columYDic release];
}

//初始化
- (instancetype)init
{
    self = [super init];
    if (self) {
        self.columYDic = [NSMutableDictionary dictionary];
        self.attributesArr = [NSMutableArray array];
    }
    return self;
}

//当collectionView布局item时 第一个执行的方法
- (void)prepareLayout
{
    //调用父类的layout方法
    [super prepareLayout];
    [self.attributesArr removeAllObjects];
    //初始化 每个item的 位置
    //通过y值判断最短列
    //通过列数 决定Y值字典中需要的键值队
    for (NSInteger i = 0; i < _columCount; i++) {
        NSString *key = [NSString stringWithFormat:@"%ld", (long)i];
        _columYDic[key] = @(_edgeInsets.top);
    }
    //collectionView中每个Section 中的 item的个数
    NSInteger itemCount = [self.collectionView numberOfItemsInSection:0];
    //遍历得到每个item 设置位置信息
    for (NSInteger i = 0; i < itemCount; i++) {
        //设置位置信息
        [self setItemFrameWithIndex:i];
    }
    
}
- (void)setItemFrameWithIndex:(NSInteger )index
{
    //获取最短列
    //设置每个Item的frame
    
    //定义一个变量用来 记录Item
    NSString *minColum = @"0";
    //遍历保存Y值的字典
    //forin的是字典的key值
    for (NSString *y in _columYDic) {
        //找到最短列
        
        if ([_columYDic[minColum] doubleValue] > [_columYDic[y] doubleValue]) {
            minColum = y;
        }
    }
    //分别计算Frame的值
    //宽 = (总宽 - 左边距 - 右边距 - (列数 - 1) * 间距) / 列数
    CGFloat w = (self.collectionView.frame.size.width - _edgeInsets.left - _edgeInsets.right - (_columCount - 1) * _columSparce) / _columCount;
    //x
    //左边距 + (宽 + 列间距) * 这是第几列(列数)(最小列)
    CGFloat x = _edgeInsets.left + (w + _columSparce) * minColum.doubleValue;
    //通过item下标 创建位置对象
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
    //h
    //获取高度
    //通过协议 在VC中求得h 传递在layout中
    CGFloat h = [self.delegate layout:self heightForItemAtIndexPath:indexPath width:w];
//    NSLog(@"h:%f,index:%ld", h, (long)indexPath.row);
    //获取y
    CGFloat y = [_columYDic[minColum] doubleValue];
    //更新y值
    //new y = y + h + rowSparce (新y = 旧y + 高 + 行间距)
    [_columYDic setObject:@(y + h + _rowSparce) forKey:minColum];
    //每个item的布局属性 包含frame /bounds / size
    //根据indexPath获取对应的属性
    UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
    //添加frame
    attributes.frame = CGRectMake(x, y, w, h);
    //保存在数组中
    [_attributesArr addObject:attributes];
//    NSLog(@"%@", _attributesArr);

}

- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
{
    return _attributesArr;
}

#pragma mark -方法4 设置滚动范围
- (CGSize)collectionViewContentSize
{
    //保存最大列的Y
    NSString *maxY = @"0";
    //获取最大Y值所在列号
    for (NSString *y in _columYDic) {
        
        if ([_columYDic[y] doubleValue] > [_columYDic[maxY] doubleValue]) {
            maxY = y;
        }
    }
    //内容高度
    CGFloat h = [_columYDic[maxY] doubleValue] + _edgeInsets.bottom;
    CGSize size = CGSizeMake(0, h);
    return size;
}

-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}




@end
